/**
 * 某个计数器一共有两种操作：
 *  1 +1操作
 *  2 清零操作
 * 现在给出若干对(i, vi)，表示第i次操作后计数器值为vi，问能否有一个操作序列满足这若干对。
 * 对于(i, 0)显然第i次操作是清零，对于(i, v)则表明第i-v次是清零，而从[i-v+1,i]均为加一操作，换言之就是不能有清零操作
 * 将每一对约束转为01约束，保存起来。并进行排序。
 * 对于加一操作要保存区间。且如果后一个区间的开头在前一个区间里，则必然矛盾，不可行
 * 如果两个区间的开头相等，则可能可行，此时只保存右端点大的一个即可
 * 处理以后，保证加一操作中的区间都是不重复的。
 * 然后对清零和加一做一个类似归并的操作，看有没有冲突即可
 */
#include <bits/stdc++.h>
using namespace std;

#include <bits/extc++.h>
using namespace __gnu_pbds;

using Real = double;
using llt = long long;
using pii = pair<int, int>;
using vi = vector<int>;

int N, M;
vector<pii> A;

bool proc(){
    vi zero;
    vector<pii> ones;
    for(const auto & p : A){
        if(p.second){
            zero.push_back(p.first - p.second);
            ones.push_back({p.first - p.second + 1, p.first});
            if(p.first - p.second < 0) return false;
        }else{
            zero.push_back(p.first);
        }
    }

    sort(zero.begin(), zero.end());
    sort(ones.begin(), ones.end(), [](const pii&a, const pii&b){
        if(a.first != b.first) return a.first < b.first;
        return a.second > b.second;
    });
    ones.erase(unique(ones.begin(), ones.end(), [](const pii&a, const pii&b){return a.first == b.first;}), ones.end());

    int k0 = 0, k1 = 0;
    int n0 = zero.size(), n1 = ones.size();

    for(int i=1;i<n1;++i){
        if(ones[i - 1].second + 1 >= ones[i].first) return false;
    }

    while(1){
        while(k0 < n0 and zero[k0] < ones[k1].first) ++k0;
        if(k0 == n0) break;

        if(zero[k0] <= ones[k1].second) return false;
       
        if(++k1 == n1) break;
    }

    return true;
}


int main(){
#ifndef ONLINE_JUDGE
    freopen("z.txt", "r", stdin);
#endif
    ios::sync_with_stdio(false);cin.tie(nullptr);cout.tie(0);
    int nofakse = 1;
    cin >> nofakse;
    while(nofakse--){
        cin >> N >> M;
        A.assign(M + 1, {0, 0});
        for(int i=1;i<=M;++i){auto&p=A[i];cin >> p.first >> p.second;}
        cout << (proc() ? "Yes" : "No") << "\n";
    }
    return 0;
}